generování tlačítka procedurou
Otázka od: SCHWARZ Karel
18. 12. 2002 14:35
Zdravim,
mam tento problem:
pri kliknuti na menu spoustim proceduru ktera mimo jine vytvori formular a na
nem vytvori combobox a tlacitka (OK a Cancel)
Potreboval bych nejak osetrit odalosti OKButton.OnClick a CancelButton.OnClick
ale nejak si s tim nevim rady...
totiz - ve zdrojaku k tomu nic nepriradim (uz jsem takovy jeden program psal a
tam to slo celkem v pohode... ale rozdil byl v tom, ze se ten formular
nevytvarel procedurou ale primo v prostredi Delphi pri psani programu) furt to
hlasi
[Error] procedury.pas(597): Incompatible types: method pointer and regular
procedure
kdyz to priradim takto: KonsOK.OnClick:=kons_tlacitko_click;
(kons_tlacitko_click je procedura která přiřazuje proměnné nějakou hodnotu
podle toho jestli bylo stisknuto OK nebo Cancel)
dik za rady
Karel Schwarz
--------------------------------------------------------
Produkcni centrum, GfK Praha
Geologicka 2, Praha 5 Barrandov
tel. +420 296 555 655
Internet: http://www.gfk.cz
Odpovedá: Ondrej Kelle
18. 12. 2002 16:01
> pri kliknuti na menu spoustim proceduru ktera mimo jine
> vytvori formular a na nem vytvori combobox a tlacitka (OK a Cancel)
> Potreboval bych nejak osetrit odalosti OKButton.OnClick a
> CancelButton.OnClick ale nejak si s tim nevim rady...
>
> totiz - ve zdrojaku k tomu nic nepriradim (uz jsem takovy
> jeden program psal a tam to slo celkem v pohode... ale rozdil
> byl v tom, ze se ten formular nevytvarel procedurou ale primo
> v prostredi Delphi pri psani programu) furt to hlasi
>
> [Error] procedury.pas(597): Incompatible types: method
> pointer and regular procedure
>
> kdyz to priradim takto: KonsOK.OnClick:=kons_tlacitko_click;
>
> (kons_tlacitko_click je procedura která přiřazuje proměnné
> nějakou hodnotu podle toho jestli bylo stisknuto OK nebo Cancel)
Kedze typ TNotifyEvent je definovany ako procedure(Sender: TObject) of
object, musi to byt metoda nejakej triedy, nie obycajna procedura. Rozdiel
je v tom, ze metoda obsahuje skryty parameter Self.
Takze bud pouzi nejaku triedu, alebo to mozes obist nejako takto:
procedure ButtonClickProc(Self, Sender: TObject);
begin
ShowMessage(Format('%s.OnClick', [(Sender as TComponent).Name]));
end;
procedure TForm1.CreateButton;
var
Method: TMethod;
begin
FButton := TButton.Create(Self);
try
FButton.Parent := Self;
FButton.Name := 'Button1';
FButton.Left := 8;
FButton.Top := 8;
Method.Code := @ButtonClickProc;
Method.Data := Self;
FButton.OnClick := TNotifyEvent(Method);
except
FreeAndNil(FButton);
raise;
end;
end;
HTH
TOndrej
Odpovedá: Petr Brant
18. 12. 2002 15:09
Patrne mas v te procedure spatne parametry nebo ji nedeklarujes uvnitr
definice objektu tridy formu. Implementace by mela vypadat takto:
procedure kons_tlacitko_click(Sender: TObject);
begin
...
end;
A deklaraci procedury musis uvest do definice tridy objektu, tedy napr.
type
TUserOptionsWnd = class(TForm)
...
procedure kons_tlacitko_click(Sender: TObject);
...
end;
RNDr. Petr Brant [brant@dcomm.cz]
http://web.redbox.cz/petr.brant
D&COMM s.r.o.
Korunovační 6
Praha 7
tel. +420724007234
Subject: generování tlačítka procedurou
pri kliknuti na menu spoustim proceduru ktera mimo jine vytvori
formular a na nem vytvori combobox a tlacitka (OK a Cancel)
Potreboval bych nejak osetrit odalosti OKButton.OnClick a
CancelButton.OnClick ale nejak si s tim nevim rady...
totiz - ve zdrojaku k tomu nic nepriradim (uz jsem takovy jeden
program psal a tam to slo celkem v pohode... ale rozdil byl v tom, ze se ten
formular nevytvarel procedurou ale primo v prostredi Delphi pri psani
programu) furt to hlasi
[Error] procedury.pas(597): Incompatible types: method pointer and
regular procedure
kdyz to priradim takto: KonsOK.OnClick:=kons_tlacitko_click;
(kons_tlacitko_click je procedura která přiřazuje proměnné nějakou
hodnotu podle toho jestli bylo stisknuto OK nebo Cancel)
Odpovedá: Ing. Jiri SOKOL
18. 12. 2002 15:50
Dne 18. prosinec 2002, <delphi-l@clexpert.cz> napsal:
> Zdravim,
>
> mam tento problem:
>
> pri kliknuti na menu spoustim proceduru ktera mimo jine vytvori formular a na
nem vytvori combobox a tlacitka (OK a Cancel)
> Potreboval bych nejak osetrit odalosti OKButton.OnClick a
CancelButton.OnClick ale nejak si s tim nevim rady...
>
> totiz - ve zdrojaku k tomu nic nepriradim (uz jsem takovy jeden program psal
a tam to slo celkem v pohode... ale rozdil byl v tom, ze se ten formular
nevytvarel procedurou ale primo v prostredi Delphi pri psani programu) furt to
hlasi
>
> [Error] procedury.pas(597): Incompatible types: method pointer and regular
procedure
>
> kdyz to priradim takto: KonsOK.OnClick:=kons_tlacitko_click;
>
> (kons_tlacitko_click je procedura která přiřazuje proměnné nějakou hodnotu
podle toho jestli bylo stisknuto OK nebo Cancel)
>
> dik za rady
Ahoj.
Jak resit Tvuj problem ... variant je nekolik. Davam dve:
1) a to si muzes vyzkouset jako samostatny projekt - modalne zobrazit formular
a tlacitku priradit
modalresult na OK=mrOK a Storno=mrCancel. Modalni formular se Ti spusti a Tvuj
program ceka na
vysledek. Pak si jenom vytahnes hodnotu, kterou Ti vrati a je to.
2) dynamicke vytvareni - to je Ti , soude z Tveho dotazu, jasne. Nenapsal jsi,
kdo je
vlastnikem(rodicem) toho vytvareneho formu. Neni chybou, ze pri definici
udalosti OnClick nepises
OnClick:=form1.kons_tlacitko_click; ???
dalsim resenim by bylo ... pri vytvareni objektu nasledne znas jeho handle.
Vis, ze cekas na
urcitou zpravu pro urcite okno, takze by to slo prinejhorsim resit i pres
odchyt zprav. Skoda, ze
jsi neposlal ten vytvareci kod ... rady by byly konkretnejsi ...
Ahoj, Jirka
Ing. Jiri Sokol, js-delphi@seznam.cz, +420251431187
D6ProfSP2,WinNT
amatersky
programator
______________________________________________________________________
Reklama:
FIMFARUM - Cesky celovecerni loutkovy film na motivy pohadek Jana Wericha.
www.fimfarum.cz V kinech od 28. listopadu. http://www.fimfarum.cz